#include "Util.hpp"
#include <iostream>
#include "../src/Buffer.hpp"
#include "../common/LoggerHelper.hpp"
#include "HttpRequest.hpp"
#include "HttpResponse.hpp"
#include "HttpContext.hpp"
#include "HttpServer.hpp"
LoggerHelper loggerhelper;

std::string get_request_str(const HttpRequest &request)
{
    std::string res;
    res += request.method_ + " " + request.path_ + " " + request.version_ + "\r\n";
    for(auto& header: request.headers_)
    {
        res += header.first + ": " + header.second + "\r\n";
    }
    res += "\r\n";
    res += request.body_;
    return res;
}

void hello(const HttpRequest &request, HttpResponse &response)
{
    // response.set_content(get_request_str(request), "text/plain");
    response.set_content("hello world", "text/plain");
    // sleep(20); //测试业务处理超时是否会影响其他的连接
}

void put_file(const HttpRequest &request, HttpResponse &response)
{   
    response.set_content("文件已经收到", "text/plain");
    Utils::write_file("./static/recvd_file.txt", request.body_);
}


int main()
{   
    HttpServer server(8080);
    server.set_basedir("./static/");
    server.set_thread_count(3);
    server.Get("/hello", hello);
    server.Put("/put_file", put_file);
    server.start();
    // HttpRequest request;
    
    // std::cout << Utils::is_valid_path("/../hello.html")  << std::endl;
    // std::cout << Utils::is_valid_path("/hello/world/../index.html") << std::endl;

    // std::vector<std::string> res;
    // Utils::spilt("/hello/../hhh", "/", &res);

    // for(auto r: res){
    //     std::cout << r << std::endl;
    // }

    // std::cout << Utils::is_dir("./static") << std::endl;
    // std::cout << Utils::is_regular("./test") << std::endl;
    // std::cout << Utils::is_dir("./test") << std::endl;
    // std::cout << Utils::is_regular("./static") << std::endl;

    // std::cout << Utils::get_statu_describe(200) << std::endl;
    // std::cout << Utils::get_ext_mime("hello.html") << std::endl;
    // std::cout << Utils::get_ext_mime("hello.png") << std::endl;
    // std::cout << Utils::get_ext_mime("config") << std::endl;

    // std::string url = "c++  ";
    // std::string encode = Utils::url_encode(url, true);
    // std::cout << encode << std::endl;

    // std::string decode = Utils::url_decode(encode, true);
    // std::cout << decode << std::endl;



    // char c = '+';
    // char tmp[4] = {0};
    // snprintf(tmp, 4, "%%%02X", c);
    // std::cout << tmp << std::endl;

    // char_to_hex(c);

    // std::string buf;
    // Utils::read_file("status", &buf);

    // std::cout << buf << std::endl;

    // Utils::write_file("txt", buf);

    // std::string src = "abc,,,,,def,ghf";
    // std::vector<std::string> arry;
    // Utils::spilt(src, ",", &arry);

    // for(auto s: arry){
    //     std::cout << s << std::endl;
    // }


    return 0;
}